package br.com.localfloripa.controllers;

import java.util.ArrayList;

import java.util.List;

import javax.faces.bean.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.security.auth.login.LoginException;

import org.primefaces.model.chart.CartesianChartModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import br.com.localfloripa.entities.Anuncio;
import br.com.localfloripa.services.AnuncioService;
import br.com.localfloripa.services.EstatisticaService;

/**
 * 
 * @author alan
 * @20/03/2012
 *
 */

@Named("dashboardController")
@RequestScoped
public class DashboardController extends MainController {

	private static final long serialVersionUID = 8111856604241823934L;
	private static final Logger log = LoggerFactory.getLogger(DashboardController.class);
	
	private static final Integer LIMIT_ROWS_LANCAMENTO = 15;
	private static final Integer LIMIT_ROWS_DESTAQUE = 18;
	
	@Inject
	@Named("anuncioService")
	private AnuncioService anuncioService;
	
	@Inject
	@Named("estatisticaService")
	private EstatisticaService estatisticaService;
	
	private Anuncio anuncio;
	
	private List<Anuncio> lancamentos;
	private List<Anuncio> destaques;
	private CartesianChartModel estatisticas;
	
	public DashboardController() {
		super();
	}
	
	public void load() {
		
		try {
			lancamentos = anuncioService.listLancamentos(LIMIT_ROWS_LANCAMENTO);
			destaques = anuncioService.listDestaques(LIMIT_ROWS_DESTAQUE);
			estatisticas = estatisticaService.barChartEstatisticasAcesso();
			
		} catch (LoginException e) {
			lancamentos = new ArrayList<Anuncio>();
			destaques = new ArrayList<Anuncio>();
			
			addMessageERROR(e.getMessage());			
			log.error(e.getMessage(),e);
		} catch (Exception e) {
			lancamentos = new ArrayList<Anuncio>();
			destaques = new ArrayList<Anuncio>();
			log.error(e.getMessage(),e);
		}
	}
	
	/**
	 * Carrega Lançamento para visualização detalhada
	 */
	public void detailedLancamento() {		
		try {
			Long idUsuario = Long.parseLong(getRequestParameter("idAnuncio"));
			this.anuncio = anuncioService.findById(idUsuario);
		} catch (LoginException e) {
			addMessageERROR(e.getMessage());
			log.error(e.getMessage(),e);		
		} catch (Exception e) {
			log.error(e.getMessage(),e);
		}	
	}
	
	/**
	 * Carrega Destaque para visualização detalhada
	 */
	public void detailedDestaque() {		
		try {
			Long idUsuario = Long.parseLong(getRequestParameter("idAnuncio"));
			this.anuncio = anuncioService.findById(idUsuario);
		} catch (LoginException e) {
			addMessageERROR(e.getMessage());
			log.error(e.getMessage(),e);		
		} catch (Exception e) {
			log.error(e.getMessage(),e);
		}	
	}

	public List<Anuncio> getLancamentos() {
		return lancamentos;
	}

	public void setLancamentos(List<Anuncio> lancamentos) {
		this.lancamentos = lancamentos;
	}

	public List<Anuncio> getDestaques() {
		return destaques;
	}

	public void setDestaques(List<Anuncio> destaques) {
		this.destaques = destaques;
	}

	public Anuncio getAnuncio() {
		return anuncio;
	}

	public void setAnuncio(Anuncio anuncio) {
		this.anuncio = anuncio;
	}

	public CartesianChartModel getEstatisticas() {
		return estatisticas;
	}

	public void setEstatisticas(CartesianChartModel estatisticas) {
		this.estatisticas = estatisticas;
	}
	
}
